#include <stdio.h> 
#include <allegro.h>
#include <stdlib.h>
#include <string.h>
//#include <maht.h>


#include "grafics.h"
#include "Funciones.h"
#include "utils.h"

void images(){

//   tux= create_bitmap(200,200);
 //  draw_sprite(screen,tux,100,500);
}
/*
*   @Nom:Pinta_llegenda
*   @Def: Pintar la part fixa de la llehenda.
*   @Arg: No rep cap argument.
*/
void Pinta_llegenda(){

     rectfill(screen,600,0,800,400,15);//Cuadrado superior de la derecha
     rect(screen,600,0,800,400,0); //Linea del cuadrado superior de la derecha 
     textprintf_ex(screen, font,610,10,0,-1,"Tirada"); //Text de tirada
     textprintf_ex(screen, font,610,130,0,-1,"Ordre");  //Text de orde
     //llegenda de caselles
     
     textprintf_ex(screen, font,610,260,0,-1,"Llegenda Casellas"); //Text de Llegenda de Casillas
     rectfill(screen,610,280,630,295,COLOR_NORMAL);//Cuadrat de les casilla normal
     rect(screen,610,280,630,295,0); //Linea del cuadrat casilla normal
     textprintf_ex(screen, font,640,286,0,-1,"Tipus Normals"); //Text de casilla normal
     rectfill(screen,610,305,630,320,COLOR_FUNCIO);//Cuadrat de casilla funcio
     rect(screen,610,305,630,320,0); //Linea del cuadrat casilla funcio
     textprintf_ex(screen, font,640,311,0,-1,"Tipus Funcio"); //Texto de casilla tipo funcion
     rectfill(screen,610,330,630,345,COLOR_BUCLE);//Cuadrat de casilla bucle infinit
     rect(screen,610,330,630,345,0); //Linea del cuadrat casilla bucle infinit
     textprintf_ex(screen, font,640,336,0,-1,"Tipus Bucle Infinit"); //Texto de casilla tipo bucle infinito
     rectfill(screen,610,355,630,370,COLOR_CORE);//Cuadrat de casilla coredumped
     rect(screen,610,355,630,370,0); //Linea del cuadrat casilla coredumped
     textprintf_ex(screen, font,640,363,0,-1,"Tipus Coredumped"); //Textt de casilla tipo coredumped
     rectfill(screen,610,380,630,395,8);//Cuadrado de casilla final
     rect(screen,610,380,630,395,0); //Linea del cuadrat casilla final
     textprintf_ex(screen, font,640,386,0,-1,"Tipus final"); //Text de casilla tipo final

}

/*
*   @Nom: CuadradoCentral
*   @Def:
*   @Arg: No rep cap argument.
*/
void CuadradoCentral(){
    rectfill(screen,0,0,600,600,15); //Cuadrado central
    rect(screen,0,0,600,600,0); //Linea del cuadrado central         
}
/*
*   @Nom:CasillasTablero
*   @Def: Pintar les lineas de les casilles
*   @Arg: No rep cap argument.
*/
void CasillasTablero(){
     
     //CASILLAS ESPECIALES
     rectfill(screen,0,540,120,600,7);
     rectfill(screen,240,240,360,360,8); //Casilla del final
     textprintf_ex(screen, font,3,543,15,-1,"SORTIDA");
     textprintf_ex(screen, font,282,296,15,-1,"FINAL");
  
     rect(screen,60,60,540,60,15);
     rect(screen,60,60,60,480,15); 
     rect(screen,120,120,120,420,15); 
     rect(screen,120,120,480,120,15);
     rect(screen,180,180,180,360,15);
     rect(screen,180,180,420,180,15);
     rect(screen,240,240,240,360,15); 
     rect(screen,240,240,360,240,15);
     rect(screen,360,240,360,360,15);
     rect(screen,180,360,360,360,15); 
     rect(screen,420,180,420,420,15);
      rect(screen,120,420,420,420,15); 
     rect(screen,480,120,480,480,15);
     rect(screen,60,480,480,480,15);
     rect(screen,540,60,540,540,15);
     rect(screen,0,540,540,540,15); 
}    
/*
*   @Nom: colorPelTipus
*   @Def: Aquesta funcio serbeix per saber quin color es la casella que estava la
        fitxa en el torn anterior.
*   @Arg: tipus es un caracter que ens diu el tipus que es la ficha.
*   @Reg: retorna un int que equivaldra al color que es la cadilla on estem.
*/
int colorPelTipus (char cTipus) {
	
	int nColor;
	switch (cTipus){
            case 'F':
                nColor = COLOR_FUNCIO;
                break;
            case 'B':
                nColor =  COLOR_BUCLE;
                break;
            case 'C':
                nColor = COLOR_CORE;
                break;
            case 'N':
                nColor = COLOR_NORMAL;
                break;
    }
    
    return nColor;
}/*
*   @Nom:pinta_ranquing
*   @Def: el que fa aquesta fucncio es pintar el ranquing del fitxer a la llegenda
*   @Arg: J[4] ( es un array de lestructura jugador on hi guardem la informacio de
        cada jugador)
        cont_ranq (
*/
void pinta_ranquing (Jugador ranq[],int cont_ranq){
    int i;
    char sNum[100];
    int nAux =450;
     rectfill(screen,600,400,800,600,15); //Cuadrado inferior derecha
     rect(screen,600,400,800,600,0); //Linea del cuadrado inferior derecho
     textprintf_ex(screen, font,610,415,0,-1,"Rankings");  //Texto de rankings
    for (i=0; i<cont_ranq ; i++){
       textprintf_ex(screen, font,630, nAux, 0, -1, ranq[i].nom);
       rect(screen, 764, nAux, 790, nAux + 15, 1);
//       printf("ranq[i] %d\n",ranq[i].total_tirades);
       textprintf_ex(screen, font, 770, nAux, 0, -1, my_itoa( ranq[i].total_tirades, sNum));
       nAux = nAux+20;
    }
}
/*
*   @Nom:borar_sortida
*   @Def:
*   @Arg: No rep cap argument.
*/
void borar_sortida(){
 rectfill(screen,0,540,120,600,7);
 textprintf_ex(screen, font,3,543,15,-1,"SORTIDA");
}

/*
*   @Nom: Borrar_Fiches
*   @Def: Per borrar el rastre de les fitxes.
*   @Arg: J[4] ( es un array de lestructura jugador on hi guardem la informacio de
        cada jugador),
        C[100] (es un arrall de caselles on hi ha les cordenades de cada casella
        i quina funcio fan.
*/

void Borrar_Fiches(caselles stC[], Jugador stJ[]){
    circlefill(screen,  20 + stC[stJ[0].casella_acrual].x, 20 + stC[stJ[0].casella_acrual].y, 7, colorPelTipus(stC[stJ[0].casella_acrual].tipus));
    circlefill(screen,  40 + stC[stJ[1].casella_acrual].x, 20 + stC[stJ[1].casella_acrual].y, 7, colorPelTipus(stC[stJ[1].casella_acrual].tipus));
    circlefill(screen,  20 + stC[stJ[2].casella_acrual].x, 40 + stC[stJ[2].casella_acrual].y, 7, colorPelTipus(stC[stJ[2].casella_acrual].tipus));
    circlefill(screen,  40 + stC[stJ[3].casella_acrual].x, 40 + stC[stJ[3].casella_acrual].y, 7, colorPelTipus(stC[stJ[3].casella_acrual].tipus));
}

/*
*   @Nom: pinta_tirada
*   @Def:
*   @Arg: J[4] ( es un array de lestructura jugador on hi guardem la informacio de
        cada jugador).
*/
void pinta_tirada(Jugador stJ[],int nTorn, int nTotal){
    char sNum[10];
    
    rectfill(screen, 610, 20, 800, 80, 15);
    textprintf_ex(screen, font, 630, 30, 0, -1, stJ[nTorn].nom);
    rect(screen, 765, 22, 790, 35, 1);
    textprintf_ex(screen, font, 771, 26, 0, -1, my_itoa( stJ[nTorn].tirada_acrual, sNum ) );
    circlefill(screen, 620, 32, 5, stJ[nTorn].color);
}
/*
*   @Nom:  pinta_ordre
*   @Def:
*   @Arg: J[4] ( es un array de lestructura jugador on hi guardem la informacio de
        cada jugador).
*/
void pinta_ordre(Jugador stJ[],int nTorn,int nTotal){
    int i = 160;
    int j = 1;
    char sNum[10];
    char sNom[50];
    
    rectfill(screen,610,140,800,250,15);// Per esborrar lordre anterior

    while (j <= nTotal){
        if (stJ[nTorn].espera != 0){
            sprintf(sNom, "(%d) %s" , stJ[nTorn].espera, stJ[nTorn].nom);    // http://c.conclase.net/librerias/?ansifun=sprintf
        }
        else{
            strcpy(sNom, stJ[nTorn].nom);
        }
        
        textprintf_ex(screen, font, 630, i, 0, -1, sNom);

        rect(screen, 765, i, 790, i + 15, 1);
        textprintf_ex(screen, font, 771, i + 4, 0, -1, my_itoa(stJ[nTorn].total_tirades, sNum));
        circlefill(screen,620, i + 2, 5, stJ[nTorn].color);
        i = i + 20;
        if (nTorn+1 == nTotal){
            nTorn = 0;
        }
        else{
            nTorn++;
        }
        
        j++;
    }
}
/*
*   @Nom: Pintar_Fitches
*   @Def:
*   @Arg: J[4] ( es un array de lestructura jugador on hi guardem la informacio de
        cada jugador),
        C[100] (es un arrall de caselles on hi ha les cordenades de cada casella
        i quina funcio fan.
*/
void Pintar_Fitches(caselles stC[], Jugador stJ[]){
    borar_sortida();
    circlefill(screen, 20 + stC[stJ[0].casella_acrual].x, 20 + stC[stJ[0].casella_acrual].y, 7, stJ[0].color);
    circlefill(screen, 40 + stC[stJ[1].casella_acrual].x, 20 + stC[stJ[1].casella_acrual].y, 7, stJ[1].color);
    circlefill(screen, 20 + stC[stJ[2].casella_acrual].x, 40 + stC[stJ[2].casella_acrual].y, 7, stJ[2].color);
    circlefill(screen, 40 + stC[stJ[3].casella_acrual].x, 40 + stC[stJ[3].casella_acrual].y, 7, stJ[3].color);
    
}
/*
*   @Nom: pintar_caselles_especials
*   @Def:
*   @Arg: C[100] (es un arrall de caselles on hi ha les cordenades de cada casella
        i quina funcio fan.
*/
void pintar_caselles_especials(caselles stC[]){
    int i;
    char sNum[10];
    for (i = 1; i < 95; i++){
        
        rectfill(screen, stC[i].x, stC[i].y, stC[i].x+60, stC[i].y+60, colorPelTipus(stC[i].tipus));
        textprintf_ex(screen, font, stC[i].x+3, stC[i].y + 3, 4, -1, my_itoa(i,sNum));

    }
}
